package com.ego.commons.pojo;

import com.ego.commons.constant.Constant;
import com.ego.commons.utils.CookieUtils;
import com.ego.commons.utils.JsonUtils;
import com.ego.commons.utils.ServletUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//专门操作购物车数据的对象

public class ShopCart {


    //直接预先创建集合
    private List<CartPojo> cartList = new ArrayList<>();

    public List<CartPojo> getCartList() {
        return cartList;
    }

    /**
     * 向购物车添加商品
     *
     * @param cartPojo 购物车对象
     */
    public void addToCart(CartPojo cartPojo) {

        for (CartPojo pojo : cartList) {

            //判断新增的商品id在集合中是否存在
            if (cartPojo.getId().equals(pojo.getId())) {
                //购物车中现有数量+新添加商品数量
                pojo.setNum(pojo.getNum() + cartPojo.getNum());
                return;
            }
        }
        cartList.add(cartPojo);
    }

    /**
     * 修改购物车中商品数量，当用户修改购物车的数量说明购物车中已经有此商品了
     *
     * @param id  商品id
     * @param num 数量
     */
    public void updateToCart(Long id, int num) {

        for (CartPojo pojo : cartList) {

            if (pojo.getId().equals(id)) {
                pojo.setNum(num);
            }
        }

    }

    /**
     * 删除购物车中商品
     *
     * @param id 商品id
     */
    public void deleteToCart(Long id) {


        //错误写法
//        for (CartPojo pojo : cartList) {
//            if(pojo.getId().equals(id)){
//                cartList.remove(pojo);
//            }
//        }

        Iterator<CartPojo> iterator = cartList.iterator();

        while (iterator.hasNext()) {
            CartPojo cartPojo = iterator.next();
            if (cartPojo.getId().equals(id)) {
                iterator.remove();
                return;
            }
        }
    }


    /**
     * 封装获取购物车
     * @return
     */
    public static ShopCart getShopCartByCookie(){
        //先从Cookie获取购物车：第一次购买Cookie没有购物车，第二次开始才有
        String shopCartStr = CookieUtils.getCookieValueBase64(ServletUtil.getRequest(), Constant.CART_NAME);

        ShopCart shopCart = null;
        if (StringUtils.isNotBlank(shopCartStr)) {
            //将Cookie中购物车JSON字符串转换成购物车对象
            shopCart = JsonUtils.jsonToPojo(shopCartStr, ShopCart.class);

        } else {//第一次向购物车添加商品，全新购物
            //创建购物车对象
            shopCart = new ShopCart();
        }

        return shopCart;
    }



    /**
     * 保存购物车到Cookie中
     * @param shopCart
     */
    public static void saveCartToCookie(ShopCart shopCart){
        //将购物车对象转换成JSON字符串以便存储到Cookie中
        String shopCartJson = JsonUtils.objectToJson(shopCart);
        //将购物车存储到Cookie中
        CookieUtils.doSetCookieBase64(ServletUtil.getRequest(), ServletUtil.getResponse(),  Constant.CART_NAME, shopCartJson, 60 * 60 * 24 * 30);
    }
}
